วิธีเพิ่ม Swap Memory ใน Elastic Beanstalk
ครั้งนี้ผมจะมาอธิบายเกี่ยวกับ วิธีเพิ่ม Swap Memory ใน Elastic Beanstalk ครับ
สิ่งที่ต้องมี
ในบทความนี้ผมจะละเว้นการอธิบายในส่วนของ Elastic Beanstalk หากผู้อ่านต้องการเรียนรู้วิธีการเริ่มต้นใช้งาน Elastic Beanstalk ผมขอแนะนำให้อ่านบทความด้านล่างนี้ครับ
เตรียมไฟล์สำหรับ Deploy เพื่อใช้ตั้งค่าใน Elastic Beanstalk
ขั้นตอนนี้ผมจะสร้าง [โฟลเดอร์ .ebextensions] และ [ไฟล์ 01_swap.config] เพื่อเตรียมไว้ใช้อัปโหลดใน Elastic Beanstalk เพื่อให้สามารถเปลี่ยนแปลงค่า Memory ของ EC2 Instance ที่สร้างจาก Environment ได้ครับ
ถ้ามีไฟล์ที่มีเนื้อหาการตั้งค่าในโฟลเดอร์ .ebextensions ของโปรเจกต์ที่จะ Deploy แล้ว เนื้อหาการตั้งค่าจะถูกดำเนินการในระหว่างการ Deploy ซึ่งเราสามารถใช้ไฟล์นี้ในการตั้งค่า Swap Memory ได้ครับ
ทำการเตรียมไฟล์ที่จะใช้ Deploy และเพิ่มการตั้งค่าต่อไปนี้ให้กับไฟล์ครับ
สร้างโฟลเดอร์ .ebextensions และไฟล์ 01_swap.config
ต่อไปให้สร้างโฟลเดอร์.ebextensions
จากนั้นคลิกเข้าไปยังโฟลเดอร์และสร้างไฟล์01_swap.config
ด้วย Notepad เหมือนกับขั้นตอนที่แล้วเลยครับ ซึ่งขั้นตอนนี้คือการสร้างไฟล์ที่จะใช้ในการตั้งค่า Swap Memory ขนาด 1024 MB (หรือ 1 GB) ใน EC2 Instance ที่สร้างขึ้นจาก Environment
Copy Code ด้านล่างนี้วางใน Notepad และ Save ลงในโฟลเดอร์ .ebextensions โดยใช้ชื่อไฟล์01_swap.config
ครับ (เราสามารถ Swap Memory ได้ตามขนาดที่ต้องการ โดยเปลี่ยนขนาดที่ count ที่สำคัญ Storage ของคุณต้องมีความจุเพียงพอจึงจะทำการ Swap Memory ได้)
commands: 01_swap_memory: test: '[ ! -e /var/swap.1 ]' command: | /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024 /sbin/mkswap /var/swap.1 /sbin/swapon /var/swap.1
เมื่อสามารถรวม ".ebextensions/01_swap.config" ไว้ในกลุ่มไฟล์ที่ใช้ Deploy แล้ว ให้ทำการบีบอัดไฟล์
หน้าจอด้านล่างนี้คือตัวอย่าง ซึ่งตัวอย่างนี้คือกรณีของโปรเจกต์ที่มีแค่ไฟล์ที่ชื่อว่า info.php ครับ
ดูตัวอย่างที่นี่เฉพาะเนื้อหาการบีบอัดไฟล์นี้ครับ: Compress to ZIP file (2 ไฟล์)
เมื่อเตรียมไฟล์เสร็จแล้ว Deploy ได้เลยครับ
การเชื่อมต่อกับ EC2 ที่สร้างจาก Elastic Beanstalk ด้วย PuTTY
ขั้นตอนต่อไปนี้คือการแสดงผลลัพธ์ใน Terminal ที่ได้จากการตั้งค่าทั้งหมดตามตัวอย่างข้างต้น โดยให้เริ่มทำการตรวจสอบตามนี้ครับ
ดูตัวอย่างที่นี่เฉพาะหัวข้อย่อยนี้: ทำการเชื่อมต่อกับ EC2 ที่สร้างใน Elastic Beanstalk ด้วย PuTTY
รันคำสั่งนี้เพื่อตรวจสอบ Memory ใน Server EC2 Instance
free -m
Output (example)
ดูที่แถว Swap: จะเห็นว่ามี total:1023
(คือ count=1024) ซึ่งเป็นค่า Memory ที่เราได้ใส่ไว้ในไฟล์ 01_swap.config นั่นเองครับ
root@ip-172-31-30-120:~
Using username "ec2-user".
Authenticating with public key "tinnakorn-test"
Last login: Mon Jul 18 05:19:49 2022 from node-bjt.pool-180-180.dynamic.totinternet.net
_____ _ _ _ ____ _ _ _
| ____| | __ ___| |_(_) ___| __ ) ___ __ _ _ __ ___| |_ __ _| | | __
| _| | |/ _ \/ __| __| |/ __| _ \ / _ \/ _\ | '_ \/ __| __/ _\ | | |/ /
| |___| | (_| \__ \ |_| | (__| |_) | __/ (_| | | | \__ \ || (_| | | <
|_____|_|\__,_|___/\__|_|\___|____/ \___|\__,_|_| |_|___/\__\__,_|_|_|\_\
Amazon Linux 2 AMI
This EC2 instance is managed by AWS Elastic Beanstalk. Changes made via SSH
WILL BE LOST if the instance is replaced by auto-scaling. For more information
on customizing your Elastic Beanstalk environment, see our documentation here:
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html
[ec2-user@ip-172-31-30-120 ~]$ free -m
total used free shared buff/cache available
Mem: 460 220 17 8 222 221
Swap: 1023 2 1021
[ec2-user@ip-172-31-30-120 ~]$
เราสามารถสร้าง Swap Memory โดยการตั้งค่าด้วยภาษาโปรแกรมนอกจาก PHP (สภาพแวดล้อม Elastic Beanstalk ที่ใช้ Amazon Linux 2 จะสามารถใช้งานได้ทั้งหมด)
สรุป
การทำงานของ Swap Memory คือการดึงพื้นที่ Storage ใน EBS มาสร้าง Swap Memory เพื่อทำหน้าที่เป็นหน่วยความจำเสมือน และทำให้ระบบการทำงานของ Linux Instance เร็วขึ้น ซึ่งวิธีนี้เราสามารถใช้กับ Elastic Beanstalk ได้ นอกจากนี้ยังช่วยให้การใช้ EC2 มีราคาที่ถูกขึ้นอีกด้วย ! มาลองทำ Swap Memory กันครับ